package wox.lonice.utis;

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;

public class WxUtils {

    private static Logger log = LoggerFactory.getLogger(WxUtils.class);
    //badaniu
    private static String APPID = "wxa7299ece7f05d77c";
    //股觅
//	private static String APPID = "wx13bbefe1afe47c46";

    //badaniu
    private static String APPSECRET = "e470b90ca872d7451e4420e90d74bd8c";
    //股觅
//	private static String APPSECRET = "ccb3a13076a59632451381faec641b1d";

    /**
     * 获取微信token
     *
     * @return
     * @throws Exception
     */
    public static String getWXToken() {

        //获取token使用url
//		String getTokenURL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
        String getTokenURL = "https://api.weixin.qq.com/cgi-bin/token";

        Map<String, String> map = Maps.newHashMap();

        map.put("grant_type", "client_credential");
        map.put("appid", APPID);
        map.put("secret", APPSECRET);
        try {
            String result = HttpUtil.net(getTokenURL, map, "GET");

            JSONObject jsonObject = JSONObject.parseObject(result);

            if (ObjectUtil.isEmpty(jsonObject.get("errcode"))) {
                return jsonObject.getString("access_token");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

//	/**
//	 * 创建永久带参二维码
//	 *
//	 * @param accessToken 接口访问凭证
//	 * @param sceneStr 场景Str
//	 * @return W11010_WeixinQRCode
//	 */
//	public static JSONObject getQR_LIMIT_SCENE(String accessToken, String sceneStr) {
//
//		// 拼接请求地址
//		String requestUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN";
//		requestUrl = requestUrl.replace("TOKEN", accessToken);
//		// 需要提交的json数据
//		String jsonMsg = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"%s\"}}}";
//		// 创建永久带参二维码
//		JSONObject jsonObject = HttpUtil.httpRequest(requestUrl, "POST", String.format(jsonMsg, sceneStr));
//
//		return jsonObject;
//	}
//
//	/**
//	 * 创建临时带参二维码
//	 *
//	 * @param accessToken 接口访问凭证
//	 * @param expireSeconds 二维码有效时间，单位为秒，最大不超过1800
//	 * @param sceneId 场景ID
//	 * @return W11010_WeixinQRCode
//	 */
//	public static JSONObject getQR_SCENE(String accessToken, Long sceneId) {
//
//		// 拼接请求地址
//		String requestUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=ACCESS_TOKEN";
//		requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
//		// 需要提交的json数据
//		String jsonMsg = "{\"expire_seconds\": 604800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": %d}}}";
//		// 创建临时带参二维码
//		JSONObject jsonObject = HttpUtil.httpRequest(requestUrl, "POST", String.format(jsonMsg, sceneId));
//
//		return jsonObject;
//	}
//
//	@Test
//	public void aweaw() throws Exception{
//		String token = getWXToken();
//
////		JSONObject jsonObject = getQR_SCENE(token, (long)101);
////		JSONObject jsonObject = getQR_SCENE(token, (long)60248);
//		JSONObject jsonObject = getQR_LIMIT_SCENE(token, "1,小米手环2砍价活动");
////		JSONObject jsonObject = getQR_LIMIT_SCENE(token, "123123");
//
//		String ticket = jsonObject.getString("ticket");
//
//		getQRCode(ticket, "C:\\Users\\admin\\Desktop");
//
//	}
//
//	/**
//	 * 根据ticket换取二维码
//	 *
//	 * @param ticket 二维码ticket
//	 * @param savePath 保存路径
//	 * @throws UnsupportedEncodingException
//	 */
//	public static String getQRCode(String ticket, String savePath) throws UnsupportedEncodingException {
//		String filePath = null;
//		// 拼接请求地址
//		String requestUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET";
//		requestUrl = requestUrl.replace("TICKET", URLEncoder.encode(ticket, "utf-8"));
//		try {
//			URL url = new URL(requestUrl);
//			HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
//			conn.setDoInput(true);
//			conn.setRequestMethod("GET");
//
//			if (!savePath.endsWith("/")) {
//				savePath += "/";
//			}
//			// 将ticket作为文件名
//			filePath = savePath + ticket + ".jpg";
//
//			// 将微信服务器返回的输入流写入文件
//			BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
//			FileOutputStream fos = new FileOutputStream(new File(filePath));
//			byte[] buf = new byte[8096];
//			int size = 0;
//			while ((size = bis.read(buf)) != -1)
//				fos.write(buf, 0, size);
//			fos.close();
//			bis.close();
//
//			conn.disconnect();
//		} catch (Exception e) {
//			filePath = null;
//		}
//		return filePath;
//	}
//
//
//	/**
//	 * 上传临时媒体文件
//	 *
//	 * @param accessToken 接口访问凭证
//	 * @param type 媒体文件类型（image、voice、video和thumb）
//	 * @param mediaFileUrl 媒体文件的url
//	 */
//	public static JSONObject uploadMedia(String token, String type, String mediaFileUrl) {
//		JSONObject jsonObject = null;
//		// 拼装请求地址
//
//		// 新增临时
//		String uploadMediaUrl = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE";
//
//		uploadMediaUrl = uploadMediaUrl.replace("ACCESS_TOKEN", token).replace("TYPE", type);
//
//		// 定义数据分隔符
//		String boundary = "------------7da2e536604c8";
//		try {
//			URL uploadUrl = new URL(uploadMediaUrl);
//			HttpURLConnection uploadConn = (HttpURLConnection) uploadUrl.openConnection();
//			uploadConn.setDoOutput(true);
//			uploadConn.setDoInput(true);
//			uploadConn.setRequestMethod("POST");
//			// 设置请求头Content-Type
//			uploadConn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
//			// 获取媒体文件上传的输出流（往微信服务器写数据）
//			OutputStream outputStream = uploadConn.getOutputStream();
//
//			URL mediaUrl = new URL(mediaFileUrl);
//			HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();
//			meidaConn.setDoOutput(true);
//			meidaConn.setRequestMethod("GET");
//
//			// 从请求头中获取内容类型
//			String contentType = meidaConn.getHeaderField("Content-Type");
//			// 根据内容类型判断文件扩展名
//			String fileExt = ".jpg";// CommonUtil.getFileExt(contentType);
//			// 请求体开始
//			outputStream.write(("--" + boundary + "\r\n").getBytes());
//			outputStream.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"file1%s\"\r\n", fileExt).getBytes());
//			outputStream.write(String.format("Content-Type: %s\r\n\r\n", contentType).getBytes());
//
//			// 获取媒体文件的输入流（读取文件）
//			BufferedInputStream bis = new BufferedInputStream(meidaConn.getInputStream());
//			byte[] buf = new byte[8096];
//			int size = 0;
//			while ((size = bis.read(buf)) != -1) {
//				// 将媒体文件写到输出流（往微信服务器写数据）
//				outputStream.write(buf, 0, size);
//			}
//			// 请求体结束
//			outputStream.write(("\r\n--" + boundary + "--\r\n").getBytes());
//			outputStream.close();
//			bis.close();
//			meidaConn.disconnect();
//
//			// 获取媒体文件上传的输入流（从微信服务器读数据）
//			InputStream inputStream = uploadConn.getInputStream();
//			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
//			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//			StringBuffer buffer = new StringBuffer();
//			String str = null;
//			while ((str = bufferedReader.readLine()) != null) {
//				buffer.append(str);
//			}
//			bufferedReader.close();
//			inputStreamReader.close();
//			// 释放资源
//			inputStream.close();
//			inputStream = null;
//			uploadConn.disconnect();
//
//			// 使用JSON-lib解析返回结果
//			jsonObject = JSONObject.fromObject(buffer.toString());
//		} catch (Exception e) {
//			jsonObject = null;
//		}
//		return jsonObject;
//	}
//
//
//	/**
//	 * 上传永久媒体文件
//	 *
//	 * @param accessToken 接口访问凭证
//	 * @param type 媒体文件类型（image、voice、video和thumb）
//	 * @param mediaFileUrl 媒体文件的url
//	 */
//	public static JSONObject uploadMasterMedia(String token, String type, String mediaFileUrl) {
//		// 拼装请求地址
//		JSONObject jsonObject = new JSONObject();
//
//		// 新增永久
//		String uploadMediaUrl = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE";
//
//		uploadMediaUrl = uploadMediaUrl.replace("ACCESS_TOKEN", token).replace("TYPE", type);
//
//		// 定义数据分隔符
//		String boundary = "------------7da2e536604c8";
//		try {
//			URL uploadUrl = new URL(uploadMediaUrl);
//			HttpURLConnection uploadConn = (HttpURLConnection) uploadUrl.openConnection();
//			uploadConn.setDoOutput(true);
//			uploadConn.setDoInput(true);
//			uploadConn.setRequestMethod("POST");
//			// 设置请求头Content-Type
//			uploadConn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
//			// 获取媒体文件上传的输出流（往微信服务器写数据）
//			OutputStream outputStream = uploadConn.getOutputStream();
//
//			URL mediaUrl = new URL(mediaFileUrl);
//			HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();
//			meidaConn.setDoOutput(true);
//			meidaConn.setRequestMethod("GET");
//
//			// 从请求头中获取内容类型
//			String contentType = meidaConn.getHeaderField("Content-Type");
//			// 根据内容类型判断文件扩展名
//			String fileExt = ".jpg";// CommonUtil.getFileExt(contentType);
//			// 请求体开始
//			outputStream.write(("--" + boundary + "\r\n").getBytes());
//			outputStream.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"file1%s\"\r\n", fileExt).getBytes());
//			outputStream.write(String.format("Content-Type: %s\r\n\r\n", contentType).getBytes());
//
//			// 获取媒体文件的输入流（读取文件）
//			BufferedInputStream bis = new BufferedInputStream(meidaConn.getInputStream());
//			byte[] buf = new byte[8096];
//			int size = 0;
//			while ((size = bis.read(buf)) != -1) {
//				// 将媒体文件写到输出流（往微信服务器写数据）
//				outputStream.write(buf, 0, size);
//			}
//			// 请求体结束
//			outputStream.write(("\r\n--" + boundary + "--\r\n").getBytes());
//			outputStream.close();
//			bis.close();
//			meidaConn.disconnect();
//
//			// 获取媒体文件上传的输入流（从微信服务器读数据）
//			InputStream inputStream = uploadConn.getInputStream();
//			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
//			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//			StringBuffer buffer = new StringBuffer();
//			String str = null;
//			while ((str = bufferedReader.readLine()) != null) {
//				buffer.append(str);
//			}
//			bufferedReader.close();
//			inputStreamReader.close();
//			// 释放资源
//			inputStream.close();
//			inputStream = null;
//			uploadConn.disconnect();
//
//			// 使用JSON-lib解析返回结果
//			jsonObject = JSONObject.fromObject(buffer.toString());
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return jsonObject;
//	}
//
//
//	/**
//	 * 下载媒体文件
//	 *
//	 * @param jc_accessToken 接口访问凭证
//	 * @param mediaId 媒体文件标识
//	 * @param savePath 文件在服务器上的存储路径
//	 * @return
//	 */
//	public static String getMedia(String accessToken, String mediaId, String savePath) {
//		String filePath = null;
//		// 拼接请求地址
//		String requestUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
//		requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId);
//		System.out.println(requestUrl);
//		try {
//			URL url = new URL(requestUrl);
//			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//			conn.setDoInput(true);
//			conn.setRequestMethod("GET");
//
//			if (!savePath.endsWith("/")) {
//				savePath += "/";
//			}
//			String ext=conn.getHeaderField("Content-Type");
//
//			// 根据内容类型获取扩展名
//			String fileExt = ext.substring(ext.lastIndexOf("/")+1,ext.length());
//
//			// 将mediaId作为文件名
//			filePath = savePath+mediaId+"."+fileExt;
//
//			File dirs = new File(savePath);
//
//			dirs.mkdirs();
//
//			BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
//
//			File files = new File(filePath);
//
//			files.createNewFile();
//
//			FileOutputStream fos = new FileOutputStream(files);
//
//			byte[] buf = new byte[8096];
//			int size = 0;
//			while ((size = bis.read(buf)) != -1)
//				fos.write(buf, 0, size);
//			fos.close();
//			bis.close();
//
//			conn.disconnect();
//		} catch (Exception e) {
//			filePath = null;
//		}
//		return filePath;
//	}
//
//
//	// 获取access_token的接口地址（GET） 限200（次/天）
//	public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
//
//	// 微信JSSDK的ticket请求URL地址
//	public final static String weixin_jssdk_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
//
//	// 微信Api的ticket请求URL地址
//	public final static String weixin_api_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card";
//
//	/**
//	 * 发起https请求并获取结果
//	 *
//	 * @param requestUrl 请求地址
//	 * @param requestMethod 请求方式（GET、POST）
//	 * @param outputStr 提交的数据
//	 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
//	 */
//	public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
//		JSONObject jsonObject = null;
//		StringBuffer buffer = new StringBuffer();
//		try {
//			// 创建SSLContext对象，并使用我们指定的信任管理器初始化
//			TrustManager[] tm = { new MyX509TrustManager() };
//			SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
//			sslContext.init(null, tm, new java.security.SecureRandom());
//			// 从上述SSLContext对象中得到SSLSocketFactory对象
//			SSLSocketFactory ssf = sslContext.getSocketFactory();
//
//			URL url = new URL(requestUrl);
//			HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
//			httpUrlConn.setSSLSocketFactory(ssf);
//
//			httpUrlConn.setDoOutput(true);
//			httpUrlConn.setDoInput(true);
//			httpUrlConn.setUseCaches(false);
//			// 设置请求方式（GET/POST）
//			httpUrlConn.setRequestMethod(requestMethod);
//
//			if ("GET".equalsIgnoreCase(requestMethod))
//				httpUrlConn.connect();
//
//			// 当有数据需要提交时
//			if (null != outputStr) {
//				OutputStream outputStream = httpUrlConn.getOutputStream();
//				// 注意编码格式，防止中文乱码
//				outputStream.write(outputStr.getBytes("UTF-8"));
//				outputStream.close();
//			}
//
//			// 将返回的输入流转换成字符串
//			InputStream inputStream = httpUrlConn.getInputStream();
//			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
//			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//
//			String str = null;
//			while ((str = bufferedReader.readLine()) != null) {
//				buffer.append(str);
//			}
//			bufferedReader.close();
//			inputStreamReader.close();
//			// 释放资源
//			inputStream.close();
//			inputStream = null;
//			httpUrlConn.disconnect();
//			jsonObject = JSONObject.fromObject(buffer.toString());
//		} catch (ConnectException ce) {
//			log.error("Weixin server connection timed out.");
//		} catch (Exception e) {
//			log.error("https request error:{}", e);
//		}
//		return jsonObject;
//	}
//
//
//	/**
//	 * 发起https请求并获取结果
//	 *
//	 * @param requestUrl 请求地址
//	 * @param requestMethod 请求方式（GET、POST）
//	 * @param outputStr 提交的数据
//	 * @return XML(通过XML.get(key)的方式获取XML对象的属性值)
//	 */
//	public static String XMLhttpRequest(String requestUrl, String requestMethod, String outputStr) {
//		String xml = null;
//		StringBuffer buffer = new StringBuffer();
//		try {
//			// 创建SSLContext对象，并使用我们指定的信任管理器初始化
//			TrustManager[] tm = { new MyX509TrustManager() };
//			SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
//			sslContext.init(null, tm, new java.security.SecureRandom());
//			// 从上述SSLContext对象中得到SSLSocketFactory对象
//			SSLSocketFactory ssf = sslContext.getSocketFactory();
//
//			URL url = new URL(requestUrl);
//			HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
//			httpUrlConn.setSSLSocketFactory(ssf);
//
//			httpUrlConn.setDoOutput(true);
//			httpUrlConn.setDoInput(true);
//			httpUrlConn.setUseCaches(false);
//			// 设置请求方式（GET/POST）
//			httpUrlConn.setRequestMethod(requestMethod);
//
//			if ("GET".equalsIgnoreCase(requestMethod))
//				httpUrlConn.connect();
//
//			// 当有数据需要提交时
//			if (null != outputStr) {
//				OutputStream outputStream = httpUrlConn.getOutputStream();
//				// 注意编码格式，防止中文乱码
//				outputStream.write(outputStr.getBytes("UTF-8"));
//				outputStream.close();
//			}
//
//			// 将返回的输入流转换成字符串
//			InputStream inputStream = httpUrlConn.getInputStream();
//			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
//			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//
//			String str = null;
//			while ((str = bufferedReader.readLine()) != null) {
//				buffer.append(str);
//			}
//			bufferedReader.close();
//			inputStreamReader.close();
//			// 释放资源
//			inputStream.close();
//			inputStream = null;
//			httpUrlConn.disconnect();
//			xml = buffer.toString();
//		} catch (ConnectException ce) {
//			log.error("Weixin server connection timed out.");
//		} catch (Exception e) {
//			log.error("https request error:{}", e);
//		}
//		return xml;
//	}

}
